連載 /JavaServer Pages—O 図 10 cookie 情報を取得するコード (cookiel ・ jsp) く %@ page contentType="text/htm1 ; charset=EUC-JP" % > く ! DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.0 Transitiona1//EN" > く html > く he ad> く meta http—equiv="Content—Type" content="text/html ; charset=EUC—JP"> く tit1e>C00kie1 く /title> く /head> く body> く % Cookie ロ for (int く % く /body> く /html > c = request . getC00kies() ; 0 ; i く c . length; i + + ) { 1 く % = c [i] . getVa1ue ( ) %> く br> 図 11 cookie 情報を表示した JSP べージ (cookiel ・ jsp) 方イル ( E ) 編集 ( 印表示 (Y) お気に入り (A) ツールヘルプ但 ) ) し : Ok 1 ー Mi 030 録 n EXO にイ 習回 第・ゆ ~ 朝奇 0 検常コお気に入り朝届歴当朝影 , ・医 0 Ⅱルりに [ 1 、 ] dSESSlO ト JID h10V1 v3ng1 [ 0 ] myOookie vanilla avo 「 = アドレス 0 h ノ / t 。に計 80 ん n 曲記こ。。 k に l.j 印 UNIX MAGAZINE 2001.10 response オプジェクトを使って成疋できます。詳しい説 に、 Web サーバーからプラウサへ送る cookie データは トを使ってアクセスできました ーから想像できるよう サーバーに送り込まれる cookie は、 request オプジェク についてもお話ししておきましよう。プラウサから Web cookie の取得をみてもらったついでに、 cookie の成疋 は cookie データを 2 っ受け取っています。 図 11 は、 cookiel. jsp を表示した画面です。この例で を使ってこれらの情報を取り出しています。 ・ getValue ( ) ・ getName() クラスのメソッドの、 報が保存されており、図 10 の JSP コードでは Cookie プジェクトを返します。 cookie には名前と値のペアの清 明は省きますが、図 12 は、 名則が yourCookie イ直カゞ、、 chocolate flavor という cookie をプラウザへ送る JSP コードです。 URL の取得 バーです。 " の 1 行を表示する JSP コード port ・ jsp HTTP の標準のポート番号でなければ、、テスト用のサー 図 13 は、ポート番号を調べて 80 番のポート、すなわち す。 などを取得するためのメソッドがひととおり揃っていま 表す文字列 ・サーバー名やポート番号を除いた Web ページの位置を ・ URL に設定されているポート番号 ・ URL に設定されているサーバー名 ・ JSP ページがどのような URL でアクセスされたか す。 request オプジェクトには、 やポート番号、データの位置などを組み合わせた文字列で 指定します。この URL は、アクセスするサーバーの名前 プラウザは Web にアクセスするときに URL を使って 125
0 JavaServer Pages— 図 7 パラメータ名か重複している場合の表示 連載 つイヨ旧 ! 材 2 ーに一 80 1 日 n を ! E い「 方イル ) 編集 ( 印表示お気に入り住 ) ツーヘルプ 言回 第 , ・ , 0 囹 0 齢山お気に入り当雇歴当朝 , 」リンク 4 " をアドい : リ可篇 ; 7 高 ; 奢高 : 言に : : : 言 : : 言 : : : な : : 勺移助 べーンが表〒は m3no 市唇 ok oolor: red 選択された色をすべて表示する 124 く % = request . getQueryString() % > タをそのまま表示します ( 図 9 ) 。 次の JSP コードは、エンコードされた状態のパラメー QueryString() メソッドカリ用できます。 があってこの文字列そのものを受け取りたい場合は、 get- ードした ) 文字列の形式になっています。何か特別な事情 名前と値を一定のルールに従ってつなぎ合わせた ( 工ンコ ーバー , ヾラメータを渡すときは、すべてのパラメータの ところで、ご存しのようにプラウザから JSP (Web) サ べてパラメータの名前と値のペアに対する操作でした。 これまでみてきた getParameterXXX メソッドは、す getQueryString メソッド を追ってみてください。 が入れ子になっていて混乱しそうですが、注意架くコード スクリプトレットの while 文や for 文と、 JSP の式タグ パラメータの値を表示するようにした JSP コードです。 す。図 8 は、 getParameterValues() を使って重複した して受け取り、名前に対応する値を文字列の酉改」で返しま getParameterValues() はパラメータの名前を引数と va. lang. String name) public java. lang. String ロ getParameterVa1ues(ja 以下にこのメソッドの呼出し形式を示します。 るときは、 getParameterValues() メソッドを使し、ます。 このように同一の名前に対して複数の値か設定されてい せん。 択した項目が 1 つの名前につき 1 っすっしか表示されま はどの parameter2. jsp を呼び出すと、図 7 のように選 この場合、すべてのチェックポックスを選択してさき と、、白 " のチェックポックス名はどちらも ssrnono" です。 ラメータ ) の名前がいすれも、、 col 。 r " です。また、、、黒 " 図 8 getParameterValues() ですべてのパラメータ値を 表示するコード く % Enumeration e = request . getParameterNames ( ) ; while (e . hasMoreE1ements ( ) ) { String name = (String) e. nextEIement ( ) ; String values ロ request . getParameterVaI ues(name) ; く % = name % > : for (int i = 0 ; i く values . length; " " 十 values [i] % > く % く % = く % く br> く % 図 9 getQueryString() の出力 方イル編集 ( 印表示 ( 辺お気に入りツール (I) ヘルプ凹 ユ第 3 融 0 ー M ロ 030 日ト t ” r ー 回ロ 」第・ー 0 囹 0 当お入り」履歴当朝Ⅳ、つ目リンりに」 oolorcred&oolor=green&color=blue&mono=blaok&mono=white 工ンコードされたパラメータの表示 ー朝スこジ裏〒されした cookie の取得 UNIX MAGAZINE 2001.10 getCookies() は、戻り値として C00kie クラスのオ ページ (cookiel. jsp ファイル ) です。 た cookie ↑欝長を配列の添字とともにすべて表示する JSP Cookies() メソッドを使って、クライアントから受け取っ とが可能です。図 10 は、 request オプジェクトの get- JSP コードでも cookie の値を設定したり取り出すこ のではないでしようか。 などで、ユーサーの識別に利用されていることはご存しな 個人用にカスタマイズしたページを表示する Web サイト かもしれません。しかし、オンライン・ショッピングや、 ろでやりとりされるので、ふだんはあまり気にしていない ジの内容そのものとは違い、ユーサーの目に触れないとこ cookie はフォームなどで渡すパラメータや、 Web/*— りされる小さなデータです。 cookie はプラウサと Web サーバーのあいだでやりと
します。図 2 は、このフォームをプラウサて表示させた 結果です。このフォームで尺された項目の名前と値を表 示する JSP ページを作ってみましよう。 一番単純なガ去は、図 3 のように getParameter() メ ソッドを使って 1 っすっパラメータの値が設定されてい るかどうかを調べることです。しかし、これでは選択肢 の数か増えるにしたがってどんどんコードが長くなります し、同じような処理を何度も繰り返すので効率も悪くなり ます。もちろん、パラメータの名前を配列にオ褓内しておけ ば、もっとすっきりしたコードにできますが、選択肢の数 だけ if 文を実行する点は変わらないので、やはり効率の問 題か残ります。 getParameterNames メソッド 効率の問題は、設定されているパラメータだけが手に入 ・風間一洋著 れは角夬できます。 getParameterNames() メソッドは、 ・ A5 判、 312 ページ 成疋されているパラメータの名前のリストを取得するメソ ・ ISBN 4-7561-3481-5 ッドです。以下は API のイ土様書から抜粋したこのメソッ ・本体 3 , 000 円十税 ドの呼出し形式です。 Java による日本語処理、さらには国際化 public java. util. Enumeration getParameterNames ( ) プログラミングに必須の知識を数多くの サンプル・プログラムを示しながら平易に getParameterNames() メソッドは引数なしで呼び出 解説する。真の意味での "Write Once, され、名則のリストを Enumeration クラスのオプジェク Run Anywhere" を目指すプログラマー トの形式で返します。 Enumeration クラスの要素にアク に最適の 1 冊。 セスするには、一般に次のコードを使います。 目次から Enumeration e 1 章 Java はどんな言語か while (e . hasMoreE1ements ( ) ) { / / まだ要素があれば 2 章 国際化と地域化 Object 0 = e. nextE1ement ( ) ; / / 次の要素を取り出す 3 章 Unicode 4 章 ロケー丿レ 5 章 工ンコーティング 図 4 は、 getParameterNames() メソッドを使って書 タイムゾーン 6 章 き換えた JSP ページ parameter2. jsp" です。また、図 7 章 リソース / ヾンドル 8 章 フォーマット出力と解析 5 は parameter2. jsp ページを表示した結果です。 9 章 文字列の比較 Enumeration クラスは標準では読み込まれないため、 10 章 テキストの境界解析 インブットメソッド 1 1 章 図 4 の 2 行目の、 12 章 文字の表示 く %@ page import="Java. util. * " % > Unicode プロック / ロケール一覧 / 付録 工ンコーティング名一覧 / タイムゾーン D 一覧 / で java. util. * ノ、ツケージを読み込むように扣正していま ユーロ通貨記号への対応 す。 株式会社アスキー getParameterVaIues メソッド 次は、図 6 に示したフォームについてみてみましよう。 今度は、、赤 " 、、緑 " 、、青 " の 3 つのチェックポックス ( パ 連載 /JavaServer Pages— SC 翡 好評発売中 ! Java フログラミング・ノート 国際化と 日本語処理 CAFE BABE 国際化と日本語処理 ・フ 〒 1 51 ー 8024 東京都渋谷区代々木 4 ー 33 ー 1 0 出版営業部 電話 ( 03 ) 535 ] ー 81 94 123 UNIX MAGAZINE 2001.10